package magnetic.field.arduino;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Localizacao {

	public int[][][] BancoMatriz() {

		/*
		 * Breve explicação do método: Sabendo previamente a quantidade de dados
		 * do banco, foi criado este método que copia os dados do banco.txt para
		 * um array tridimensional. Onde temos as seguintes informações:
		 * Posições: 0 - 9 Direções: 0 - 3 Coordenadas magnéticas x y z
		 */

		FileReader fileR; // Arquivo de entrada
		BufferedReader buff; // Classe para leitura de entrada
		int P = 10; // Número de posições
		int D = 4; // Número de direções
		int i, j; // contadores
		int x, y, z; // coordenadas do campo magnético

		int E[][][] = new int[P][D][3]; // matriz para alocação do banco de
										// dados

		try {
			fileR = new FileReader("banco");
			buff = new BufferedReader(fileR);
			for (i = 0; i <= 9; i++) {
				@SuppressWarnings("unused")
				int posicao = Integer.parseInt(buff.readLine());

				for (j = 0; j <= 3; j++) {
					String[] parts = buff.readLine().split(" ");
					x = Integer.parseInt(parts[0]);
					y = Integer.parseInt(parts[1]);
					z = Integer.parseInt(parts[2]);
					E[i][j][0] = x;
					E[i][j][1] = y;
					E[i][j][2] = z;
				}
			}
			buff.close();

		} catch (FileNotFoundException e) {
			System.out.println("Arquivo de banco de dados não encontrado");
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return E;
	}

	public int comparar(int pontoAtual[][]) {
		int e[][][] = BancoMatriz();
		int P = 10; // Número de posições
		int D = 4; // Número de direções
		double distMedia[] = new double[D];
		int m, posicao = 0, n = 0;
		double x, y, z;
		double soma[] = new double[P];
		double menor = 4000;

		for (n = 0; n < P; n++) {
			for (m = 0; m < D; m++) {
				x = pontoAtual[0][m] - e[n][m][0];
				y = pontoAtual[1][m] - e[n][m][1];
				z = pontoAtual[2][m] - e[n][m][2];

				distMedia[m] = Math.sqrt(x * x + y * y + z * z);

				soma[n] = soma[n] + distMedia[m];

			}
			if (soma[n] < menor) {
				menor = soma[n];
				posicao = n;
			}
		}

		return posicao;
	}

	public static void main(String[] args) {
		Localizacao a = new Localizacao();
		int teste[][] = new int[3][4];
		teste[0][0] = 500;
		teste[0][1] = 241;
		teste[0][2] = 495;
		teste[0][3] = 479;
		teste[1][0] = 417;
		teste[1][1] = 215;
		teste[1][2] = 102;
		teste[1][3] = 77;
		teste[2][0] = 30;
		teste[2][1] = 185;
		teste[2][2] = 307;
		teste[2][3] = 127;
		int u = a.comparar(teste);
		System.out.println(u);

	}
}
